diff --git a/system/helpers/captcha_helper.php b/system/helpers/captcha_helper.php
new file mode 100644
index 0000000..a587892
--- /dev/null
+++ b/system/helpers/captcha_helper.php
@@ -0,0 +1,246 @@
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+/**
+ * CodeIgniter
+ *
+ * An open source application development framework for PHP 4.3.2 or newer
+ *
+ * @package		CodeIgniter
+ * @author		ExpressionEngine Dev Team
+ * @copyright	Copyright (c) 2008 - 2010, EllisLab, Inc.
+ * @license		http://codeigniter.com/user_guide/license.html
+ * @link		http://codeigniter.com
+ * @since		Version 1.0
+ * @filesource
+ */
+
+// ------------------------------------------------------------------------
+
+/**
+ * CodeIgniter CAPTCHA Helper
+ *
+ * @package		CodeIgniter
+ * @subpackage	Helpers
+ * @category	Helpers
+ * @author		ExpressionEngine Dev Team
+ * @link		http://codeigniter.com/user_guide/helpers/xml_helper.html
+ */
+
+// ------------------------------------------------------------------------
+
+/**
+ * Create CAPTCHA
+ *
+ * @access	public
+ * @param	array	array of data for the CAPTCHA
+ * @param	string	path to create the image in
+ * @param	string	URL to the CAPTCHA image folder
+ * @param	string	server path to font
+ * @return	string
+ */
+if ( ! function_exists('create_captcha'))
+{
+	function create_captcha($data = '', $img_path = '', $img_url = '', $font_path = '')
+	{		
+		$defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200);		
+	
+		foreach ($defaults as $key => $val)
+		{
+			if ( ! is_array($data))
+			{
+				if ( ! isset($$key) OR $$key == '')
+				{
+					$$key = $val;
+				}
+			}
+			else
+			{			
+				$$key = ( ! isset($data[$key])) ? $val : $data[$key];
+			}
+		}
+	
+		if ($img_path == '' OR $img_url == '')
+		{
+			return FALSE;
+		}
+
+		if ( ! @is_dir($img_path))
+		{
+			return FALSE;
+		}
+	
+		if ( ! is_writable($img_path))
+		{
+			return FALSE;
+		}
+			
+		if ( ! extension_loaded('gd'))
+		{
+			return FALSE;
+		}		
+	
+		// -----------------------------------
+		// Remove old images	
+		// -----------------------------------
+			
+		list($usec, $sec) = explode(" ", microtime());
+		$now = ((float)$usec + (float)$sec);
+			
+		$current_dir = @opendir($img_path);
+	
+		while($filename = @readdir($current_dir))
+		{
+			if ($filename != "." and $filename != ".." and $filename != "index.html")
+			{
+				$name = str_replace(".jpg", "", $filename);
+		
+				if (($name + $expiration) < $now)
+				{
+					@unlink($img_path.$filename);
+				}
+			}
+		}
+	
+		@closedir($current_dir);
+
+		// -----------------------------------
+		// Do we have a "word" yet?
+		// -----------------------------------
+	
+	   if ($word == '')
+	   {
+			$pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
+
+			$str = '';
+			for ($i = 0; $i < 8; $i++)
+			{
+				$str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
+			}
+		
+			$word = $str;
+	   }
+	
+		// -----------------------------------
+		// Determine angle and position	
+		// -----------------------------------
+	
+		$length	= strlen($word);
+		$angle	= ($length >= 6) ? rand(-($length-6), ($length-6)) : 0;
+		$x_axis	= rand(6, (360/$length)-16);			
+		$y_axis = ($angle >= 0 ) ? rand($img_height, $img_width) : rand(6, $img_height);
+	
+		// -----------------------------------
+		// Create image
+		// -----------------------------------
+	
+		// PHP.net recommends imagecreatetruecolor(), but it isn't always available
+		if (function_exists('imagecreatetruecolor'))
+		{
+			$im = imagecreatetruecolor($img_width, $img_height);
+		}
+		else
+		{
+			$im = imagecreate($img_width, $img_height);
+		}
+			
+		// -----------------------------------
+		//  Assign colors
+		// -----------------------------------
+	
+		$bg_color		= imagecolorallocate ($im, 255, 255, 255);
+		$border_color	= imagecolorallocate ($im, 153, 102, 102);
+		$text_color		= imagecolorallocate ($im, 204, 153, 153);
+		$grid_color		= imagecolorallocate($im, 255, 182, 182);
+		$shadow_color	= imagecolorallocate($im, 255, 240, 240);
+
+		// -----------------------------------
+		//  Create the rectangle
+		// -----------------------------------
+	
+		ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $bg_color);
+	
+		// -----------------------------------
+		//  Create the spiral pattern
+		// -----------------------------------
+	
+		$theta		= 1;
+		$thetac		= 7;
+		$radius		= 16;
+		$circles	= 20;
+		$points		= 32;
+
+		for ($i = 0; $i < ($circles * $points) - 1; $i++)
+		{
+			$theta = $theta + $thetac;
+			$rad = $radius * ($i / $points );
+			$x = ($rad * cos($theta)) + $x_axis;
+			$y = ($rad * sin($theta)) + $y_axis;
+			$theta = $theta + $thetac;
+			$rad1 = $radius * (($i + 1) / $points);
+			$x1 = ($rad1 * cos($theta)) + $x_axis;
+			$y1 = ($rad1 * sin($theta )) + $y_axis;
+			imageline($im, $x, $y, $x1, $y1, $grid_color);
+			$theta = $theta - $thetac;
+		}
+
+		// -----------------------------------
+		//  Write the text
+		// -----------------------------------
+	
+		$use_font = ($font_path != '' AND file_exists($font_path) AND function_exists('imagettftext')) ? TRUE : FALSE;
+		
+		if ($use_font == FALSE)
+		{
+			$font_size = 5;
+			$x = rand(0, $img_width/($length/3));
+			$y = 0;
+		}
+		else
+		{
+			$font_size	= 16;
+			$x = rand(0, $img_width/($length/1.5));
+			$y = $font_size+2;
+		}
+
+		for ($i = 0; $i < strlen($word); $i++)
+		{
+			if ($use_font == FALSE)
+			{
+				$y = rand(0 , $img_height/2);
+				imagestring($im, $font_size, $x, $y, substr($word, $i, 1), $text_color);
+				$x += ($font_size*2);
+			}
+			else
+			{		
+				$y = rand($img_height/2, $img_height-3);
+				imagettftext($im, $font_size, $angle, $x, $y, $text_color, $font_path, substr($word, $i, 1));
+				$x += $font_size;
+			}
+		}
+	
+
+		// -----------------------------------
+		//  Create the border
+		// -----------------------------------
+
+		imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color);		
+
+		// -----------------------------------
+		//  Generate the image
+		// -----------------------------------
+	
+		$img_name = $now.'.jpg';
+
+		ImageJPEG($im, $img_path.$img_name);
+	
+		$img = "<img src=\"$img_url$img_name\" width=\"$img_width\" height=\"$img_height\" style=\"border:0;\" alt=\" \" />";
+	
+		ImageDestroy($im);
+		
+		return array('word' => $word, 'time' => $now, 'image' => $img);
+	}
+}
+
+// ------------------------------------------------------------------------
+
+/* End of file captcha_pi.php */
+/* Location: ./system/plugins/captcha_pi.php */
\ No newline at end of file
diff --git a/system/plugins/captcha_pi.php b/system/plugins/captcha_pi.php
deleted file mode 100644
index 7092f28..0000000
--- a/system/plugins/captcha_pi.php
+++ /dev/null
@@ -1,355 +0,0 @@
-<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
-/**
- * CodeIgniter
- *
- * An open source application development framework for PHP 4.3.2 or newer
- *
- * @package		CodeIgniter
- * @author		ExpressionEngine Dev Team
- * @copyright	Copyright (c) 2008 - 2010, EllisLab, Inc.
- * @license		http://codeigniter.com/user_guide/license.html
- * @link		http://codeigniter.com
- * @since		Version 1.0
- * @filesource
- */
-
-// ------------------------------------------------------------------------
-
-/*
-Instructions:
-
-Load the plugin using:
-
- 	$this->load->plugin('captcha');
-
-Once loaded you can generate a captcha like this:
-	
-	$vals = array(
-					'word'		 => 'Random word',
-					'img_path'	 => './captcha/',
-					'img_url'	 => 'http://example.com/captcha/',
-					'font_path'	 => './path/to/fonts/texb.ttf',
-					'img_width'	 => '150',
-					'img_height' => 30,
-					'expiration' => 7200
-				);
-	
-	$cap = create_captcha($vals);
-	echo $cap['image'];
-	
-
-NOTES:
-	
-	The captcha function requires the GD image library.
-	
-	Only the img_path and img_url are required.
-	
-	If a "word" is not supplied, the function will generate a random
-	ASCII string.  You might put together your own word library that
-	you can draw randomly from.
-	
-	If you do not specify a path to a TRUE TYPE font, the native ugly GD
-	font will be used.
-	
-	The "captcha" folder must be writable (666, or 777)
-	
-	The "expiration" (in seconds) signifies how long an image will
-	remain in the captcha folder before it will be deleted.  The default
-	is two hours.
-
-RETURNED DATA
-
-The create_captcha() function returns an associative array with this data:
-
-  [array]
-  (
-	'image' => IMAGE TAG
-	'time'	=> TIMESTAMP (in microtime)
-	'word'	=> CAPTCHA WORD
-  )
-
-The "image" is the actual image tag:
-<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
-
-The "time" is the micro timestamp used as the image name without the file
-extension.  It will be a number like this:  1139612155.3422
-
-The "word" is the word that appears in the captcha image, which if not
-supplied to the function, will be a random string.
-
-
-ADDING A DATABASE
-
-In order for the captcha function to prevent someone from posting, you will need
-to add the information returned from create_captcha() function to your database.
-Then, when the data from the form is submitted by the user you will need to verify
-that the data exists in the database and has not expired.
-
-Here is a table prototype:
-
-	CREATE TABLE captcha (
-	 captcha_id bigint(13) unsigned NOT NULL auto_increment,
-	 captcha_time int(10) unsigned NOT NULL,
-	 ip_address varchar(16) default '0' NOT NULL,
-	 word varchar(20) NOT NULL,
-	 PRIMARY KEY `captcha_id` (`captcha_id`),
-	 KEY `word` (`word`)
-	)
-
-
-Here is an example of usage with a DB.
-
-On the page where the captcha will be shown you'll have something like this:
-
-	$this->load->plugin('captcha');
-	$vals = array(
-					'img_path'	 => './captcha/',
-					'img_url'	 => 'http://example.com/captcha/'
-				);
-	
-	$cap = create_captcha($vals);
-
-	$data = array(
-					'captcha_time'	=> $cap['time'],
-					'ip_address'	=> $this->input->ip_address(),
-					'word'			=> $cap['word']
-				);
-
-	$query = $this->db->insert_string('captcha', $data);
-	$this->db->query($query);
-		
-	echo 'Submit the word you see below:';
-	echo $cap['image'];
-	echo '<input type="text" name="captcha" value="" />';
-
-
-Then, on the page that accepts the submission you'll have something like this:
-
-	// First, delete old captchas
-	$expiration = time()-7200; // Two hour limit
-	$this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);		
-
-	// Then see if a captcha exists:
-	$sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND date > ?";
-	$binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
-	$query = $this->db->query($sql, $binds);
-	$row = $query->row();
-
-	if ($row->count == 0)
-	{
-		echo "You must submit the word that appears in the image";
-	}
-
-*/
-
-
-	
-/**
-|==========================================================
-| Create Captcha
-|==========================================================
-|
-*/
-function create_captcha($data = '', $img_path = '', $img_url = '', $font_path = '')
-{		
-	$defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200);		
-	
-	foreach ($defaults as $key => $val)
-	{
-		if ( ! is_array($data))
-		{
-			if ( ! isset($$key) OR $$key == '')
-			{
-				$$key = $val;
-			}
-		}
-		else
-		{			
-			$$key = ( ! isset($data[$key])) ? $val : $data[$key];
-		}
-	}
-	
-	if ($img_path == '' OR $img_url == '')
-	{
-		return FALSE;
-	}
-
-	if ( ! @is_dir($img_path))
-	{
-		return FALSE;
-	}
-	
-	if ( ! is_writable($img_path))
-	{
-		return FALSE;
-	}
-			
-	if ( ! extension_loaded('gd'))
-	{
-		return FALSE;
-	}		
-	
-	// -----------------------------------
-	// Remove old images	
-	// -----------------------------------
-			
-	list($usec, $sec) = explode(" ", microtime());
-	$now = ((float)$usec + (float)$sec);
-			
-	$current_dir = @opendir($img_path);
-	
-	while($filename = @readdir($current_dir))
-	{
-		if ($filename != "." and $filename != ".." and $filename != "index.html")
-		{
-			$name = str_replace(".jpg", "", $filename);
-		
-			if (($name + $expiration) < $now)
-			{
-				@unlink($img_path.$filename);
-			}
-		}
-	}
-	
-	@closedir($current_dir);
-
-	// -----------------------------------
-	// Do we have a "word" yet?
-	// -----------------------------------
-	
-   if ($word == '')
-   {
-		$pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
-
-		$str = '';
-		for ($i = 0; $i < 8; $i++)
-		{
-			$str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
-		}
-		
-		$word = $str;
-   }
-	
-	// -----------------------------------
-	// Determine angle and position	
-	// -----------------------------------
-	
-	$length	= strlen($word);
-	$angle	= ($length >= 6) ? rand(-($length-6), ($length-6)) : 0;
-	$x_axis	= rand(6, (360/$length)-16);			
-	$y_axis = ($angle >= 0 ) ? rand($img_height, $img_width) : rand(6, $img_height);
-	
-	// -----------------------------------
-	// Create image
-	// -----------------------------------
-	
-	// PHP.net recommends imagecreatetruecolor(), but it isn't always available
-	if (function_exists('imagecreatetruecolor'))
-	{
-		$im = imagecreatetruecolor($img_width, $img_height);
-	}
-	else
-	{
-		$im = imagecreate($img_width, $img_height);
-	}
-			
-	// -----------------------------------
-	//  Assign colors
-	// -----------------------------------
-	
-	$bg_color		= imagecolorallocate ($im, 255, 255, 255);
-	$border_color	= imagecolorallocate ($im, 153, 102, 102);
-	$text_color		= imagecolorallocate ($im, 204, 153, 153);
-	$grid_color		= imagecolorallocate($im, 255, 182, 182);
-	$shadow_color	= imagecolorallocate($im, 255, 240, 240);
-
-	// -----------------------------------
-	//  Create the rectangle
-	// -----------------------------------
-	
-	ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $bg_color);
-	
-	// -----------------------------------
-	//  Create the spiral pattern
-	// -----------------------------------
-	
-	$theta		= 1;
-	$thetac		= 7;
-	$radius		= 16;
-	$circles	= 20;
-	$points		= 32;
-
-	for ($i = 0; $i < ($circles * $points) - 1; $i++)
-	{
-		$theta = $theta + $thetac;
-		$rad = $radius * ($i / $points );
-		$x = ($rad * cos($theta)) + $x_axis;
-		$y = ($rad * sin($theta)) + $y_axis;
-		$theta = $theta + $thetac;
-		$rad1 = $radius * (($i + 1) / $points);
-		$x1 = ($rad1 * cos($theta)) + $x_axis;
-		$y1 = ($rad1 * sin($theta )) + $y_axis;
-		imageline($im, $x, $y, $x1, $y1, $grid_color);
-		$theta = $theta - $thetac;
-	}
-
-	// -----------------------------------
-	//  Write the text
-	// -----------------------------------
-	
-	$use_font = ($font_path != '' AND file_exists($font_path) AND function_exists('imagettftext')) ? TRUE : FALSE;
-		
-	if ($use_font == FALSE)
-	{
-		$font_size = 5;
-		$x = rand(0, $img_width/($length/3));
-		$y = 0;
-	}
-	else
-	{
-		$font_size	= 16;
-		$x = rand(0, $img_width/($length/1.5));
-		$y = $font_size+2;
-	}
-
-	for ($i = 0; $i < strlen($word); $i++)
-	{
-		if ($use_font == FALSE)
-		{
-			$y = rand(0 , $img_height/2);
-			imagestring($im, $font_size, $x, $y, substr($word, $i, 1), $text_color);
-			$x += ($font_size*2);
-		}
-		else
-		{		
-			$y = rand($img_height/2, $img_height-3);
-			imagettftext($im, $font_size, $angle, $x, $y, $text_color, $font_path, substr($word, $i, 1));
-			$x += $font_size;
-		}
-	}
-	
-
-	// -----------------------------------
-	//  Create the border
-	// -----------------------------------
-
-	imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color);		
-
-	// -----------------------------------
-	//  Generate the image
-	// -----------------------------------
-	
-	$img_name = $now.'.jpg';
-
-	ImageJPEG($im, $img_path.$img_name);
-	
-	$img = "<img src=\"$img_url$img_name\" width=\"$img_width\" height=\"$img_height\" style=\"border:0;\" alt=\" \" />";
-	
-	ImageDestroy($im);
-		
-	return array('word' => $word, 'time' => $now, 'image' => $img);
-}
-
-
-/* End of file captcha_pi.php */
-/* Location: ./system/plugins/captcha_pi.php */
\ No newline at end of file
diff --git a/user_guide/helpers/captcha_helper.html b/user_guide/helpers/captcha_helper.html
new file mode 100644
index 0000000..297e47e
--- /dev/null
+++ b/user_guide/helpers/captcha_helper.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>CAPTCHA Helper : CodeIgniter User Guide</title>
+
+<style type='text/css' media='all'>@import url('../userguide.css');</style>
+<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
+
+<script type="text/javascript" src="../nav/nav.js"></script>
+<script type="text/javascript" src="../nav/prototype.lite.js"></script>
+<script type="text/javascript" src="../nav/moo.fx.js"></script>
+<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
+
+<meta http-equiv='expires' content='-1' />
+<meta http-equiv= 'pragma' content='no-cache' />
+<meta name='robots' content='all' />
+<meta name='author' content='ExpressionEngine Dev Team' />
+<meta name='description' content='CodeIgniter User Guide' />
+
+</head>
+<body>
+
+<!-- START NAVIGATION -->
+<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
+<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
+<div id="masthead">
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td><h1>CodeIgniter User Guide Version 1.7.2</h1></td>
+<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
+</tr>
+</table>
+</div>
+<!-- END NAVIGATION -->
+
+
+<!-- START BREADCRUMB -->
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td id="breadcrumb">
+<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
+<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
+CAPTCHA Helper
+</td>
+<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
+</tr>
+</table>
+<!-- END BREADCRUMB -->
+
+<br clear="all" />
+
+
+<!-- START CONTENT -->
+<div id="content">
+
+
+<h1>CAPTCHA Helper</h1>
+
+<p>The CAPTCHA Helper file contains functions that assist in creating CAPTCHA images.</p>
+
+
+<h2>Loading this Helper</h2>
+
+<p>This helper is loaded using the following code:</p>
+<code>$this->load->helper('captcha');</code>
+
+<p>The following functions are available:</p>
+
+<h2>captcha_create(<var>$data</var>)</h2>
+
+<p>Takes an array of information to generate the CAPTCHA as input and creates the image to your specifications, returning an array of associative data about the image.</p>
+
+<code>[array]<br />
+(<br />
+&nbsp;&nbsp;'image' => IMAGE TAG<br />
+&nbsp;&nbsp;'time'	=> TIMESTAMP (in microtime)<br />
+&nbsp;&nbsp;'word'	=> CAPTCHA WORD<br />
+)</code>
+
+	<p>The "image" is the actual image tag:
+<code>&lt;img src=&quot;http://example.com/captcha/12345.jpg&quot; width=&quot;140&quot; height=&quot;50&quot; /&gt;</code></p>
+
+	<p>The "time" is the micro timestamp used as the image name without the file
+	extension.  It will be a number like this:  1139612155.3422</p>
+
+	<p>The "word" is the word that appears in the captcha image, which if not
+	supplied to the function, will be a random string.</p>
+	
+	<h3>Using the CAPTCHA plugin</h3>
+	
+	<p>Once loaded you can generate a captcha like this:</p>
+
+<code>$vals = array(<br />
+&nbsp;&nbsp;&nbsp;&nbsp;'word'		 => 'Random word',<br />
+&nbsp;&nbsp;&nbsp;&nbsp;'img_path'	 => './captcha/',<br />
+&nbsp;&nbsp;&nbsp;&nbsp;'img_url'	 => 'http://example.com/captcha/',<br />
+&nbsp;&nbsp;&nbsp;&nbsp;'font_path'	 => './path/to/fonts/texb.ttf',<br />
+&nbsp;&nbsp;&nbsp;&nbsp;'img_width'	 => '150',<br />
+&nbsp;&nbsp;&nbsp;&nbsp;'img_height' => 30,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;'expiration' => 7200<br />
+&nbsp;&nbsp;&nbsp;&nbsp;);<br />
+<br />
+$cap = create_captcha($vals);<br />
+echo $cap['image'];</code>
+
+	<ul>
+		<li>The captcha function requires the GD image library.</li>
+		<li>Only the img_path and img_url are required.</li>
+		<li>If a "word" is not supplied, the function will generate a random
+		ASCII string.  You might put together your own word library that
+		you can draw randomly from.</li>
+		<li>If you do not specify a path to a TRUE TYPE font, the native ugly GD
+		font will be used.</li>
+		<li>The "captcha" folder must be writable (666, or 777)</li>
+		<li>The "expiration" (in seconds) signifies how long an image will
+		remain in the captcha folder before it will be deleted.  The default
+		is two hours.</li>
+	</ul>
+
+	<h3>Adding a Database</h3>
+	
+	<p>In order for the captcha function to prevent someone from submitting, you will need
+	to add the information returned from <kbd>create_captcha()</kbd> function to your database.
+	Then, when the data from the form is submitted by the user you will need to verify
+	that the data exists in the database and has not expired.</p>
+	
+	<p>Here is a table prototype:</p>
+	
+<code>CREATE TABLE captcha (<br />
+&nbsp;captcha_id bigint(13) unsigned NOT NULL auto_increment,<br />
+&nbsp;captcha_time int(10) unsigned NOT NULL,<br />
+&nbsp;ip_address varchar(16) default '0' NOT NULL,<br />
+&nbsp;word varchar(20) NOT NULL,<br />
+&nbsp;PRIMARY KEY `captcha_id` (`captcha_id`),<br />
+&nbsp;KEY `word` (`word`)<br />
+)</code>
+
+	<p>Here is an example of usage with a database.  On the page where the CAPTCHA will be shown you'll have something like this:</p>
+	
+<code>$this-&gt;load-&gt;plugin(&#x27;captcha&#x27;);<br />
+$vals = array(<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&#x27;img_path&#x27;	 =&gt; &#x27;./captcha/&#x27;,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&#x27;img_url&#x27;	 =&gt; &#x27;http://example.com/captcha/&#x27;<br />
+&nbsp;&nbsp;&nbsp;&nbsp;);<br />
+<br />
+$cap = create_captcha($vals);<br />
+<br />
+$data = array(<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&#x27;captcha_time&#x27;	=&gt; $cap[&#x27;time&#x27;],<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&#x27;ip_address&#x27;	=&gt; $this-&gt;input-&gt;ip_address(),<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&#x27;word&#x27;			=&gt; $cap[&#x27;word&#x27;]<br />
+&nbsp;&nbsp;&nbsp;&nbsp;);<br />
+<br />
+$query = $this-&gt;db-&gt;insert_string(&#x27;captcha&#x27;, $data);<br />
+$this-&gt;db-&gt;query($query);<br />
+<br />
+echo &#x27;Submit the word you see below:&#x27;;<br />
+echo $cap[&#x27;image&#x27;];<br />
+echo &#x27;&lt;input type=&quot;text&quot; name=&quot;captcha&quot; value=&quot;&quot; /&gt;&#x27;;</code>
+
+	<p>Then, on the page that accepts the submission you'll have something like this:</p>
+	
+<code>// First, delete old captchas<br />
+$expiration = time()-7200; // Two hour limit<br />
+$this-&gt;db-&gt;query(&quot;DELETE FROM captcha WHERE captcha_time &lt; &quot;.$expiration);	<br />	
+<br />
+// Then see if a captcha exists:<br />
+$sql = &quot;SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND date &gt; ?&quot;;<br />
+$binds = array($_POST[&#x27;captcha&#x27;], $this-&gt;input-&gt;ip_address(), $expiration);<br />
+$query = $this-&gt;db-&gt;query($sql, $binds);<br />
+$row = $query-&gt;row();<br />
+<br />
+if ($row-&gt;count == 0)<br />
+{<br />
+&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;You must submit the word that appears in the image&quot;;<br />
+}</code>
+	
+</div>
+<!-- END CONTENT -->
+
+
+<div id="footer">
+<p>
+Previous Topic:&nbsp;&nbsp;<a href="url_helper.html">URL Helper</a>
+&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="../index.html">User Guide Home</a>
+</p>
+<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006-2010 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
+</div>
+
+</body>
+</html>
\ No newline at end of file
